package dk.muldbjergskolen.db;

import dk.muldbjergskolen.model.*;

import java.util.ArrayList;
import java.sql.*;

public class KlasseDB {
	private Connection con;

	public KlasseDB() {
		con = ConnectionDB.getInstance().getDBcon();
	}

	// finder aargange udfra navn
	public ArrayList<Klasse> findAargange(String navn) {
		ArrayList<Klasse> fA = new ArrayList<Klasse>();
		String query = "Select id, navn, aargang from Klasse where navn = '"
				+ navn + "'";
		Klasse k = null;

		try {
			Statement stmt = con.createStatement();
			stmt.setQueryTimeout(5);
			ResultSet rs = stmt.executeQuery(query);

			while (rs.next()) {
				k = buildKlasse(rs);
				fA.add(k);
			}
			rs.close();
		}

		catch (SQLException e) {
			e.printStackTrace();
		}
		return fA;

	}

	// Finder og returnerer klasser i en ArrayListe.
	public ArrayList<Klasse> findKlasser() {
		ArrayList<Klasse> aK = new ArrayList<Klasse>();
		String query = "Select id, aargang, navn from Klasse";
		Klasse k = null;

		try {
			Statement stmt = con.createStatement();
			stmt.setQueryTimeout(5);
			ResultSet rs = stmt.executeQuery(query);

			while (rs.next()) {
				k = buildKlasse(rs);
				aK.add(k);
			}
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return aK;
	}

	// Laver et klasse udfra databasen.
	public Klasse buildKlasse(ResultSet result) {
		Klasse k = null;

		try {
			k = new Klasse(result.getInt("id"), result.getString("navn"),
					result.getInt("aargang"));
			// k.setSkemaId(result.getInt("skemaId"));

		}

		catch (Exception e) {
			System.out
					.println("Fejl i opbygningen af klasse." + e.getMessage());
		}

		return k;
	}

	/**
	 * Indsætter klasse i db.
	 * 
	 * @param k
	 */
	public void opretKlasse(Klasse k) throws SQLException {
		String query = "insert into Klasse (navn, aargang) values ('"
				+ k.getKlasseNavn() + "' , '" + k.getAargang() + "')";

		try {
			Statement stmt = con.createStatement();
			stmt.setQueryTimeout(5);
			stmt.executeUpdate(query);
		} catch (SQLException e) {
			throw e;
		}
	}

	// updater klasse ud fra id
	public int updateKlasse(Klasse k, int glId) {
		Klasse kObj = k;
		int rc = -1;

		String query = "UPDATE Klasse SET navn='" + kObj.getKlasseNavn()
				+ "' ,aargang ='" + kObj.getAargang() + "' where id = '" + glId
				+ "'";

		System.out.println("Update query:" + query);
		try { // update klasse
			Statement stmt = con.createStatement();
			stmt.setQueryTimeout(5);
			rc = stmt.executeUpdate(query);

			stmt.close();
		}// slut try
		catch (Exception e) {
			System.out.println("Update exception in klasse db: " + e);
		}
		return (rc);
	}

	// finder en klasse ud fra id og bygger den.
	public Klasse findklasse(String navn, int aargang) {
		Klasse k = null;

		String query = "select * from Klasse where navn = '" + navn
				+ "' and aargang = '" + aargang + "'";

		try { // update klasse
			Statement stmt = con.createStatement();
			stmt.setQueryTimeout(5);
			ResultSet rs = stmt.executeQuery(query);

			if (rs.next()) {
				k = buildKlasse(rs);
			}

			return k;

		} catch (Exception sql) {
			System.out.println(sql);
		}
		return null;
	}

	// finder en klasse ud fra id og bygger den.
	public Klasse findklasseid(int id) {
		Klasse k = null;

		String query = "select * from Klasse where id = '" + id + "'";

		try { // update klasse
			Statement stmt = con.createStatement();
			stmt.setQueryTimeout(5);
			ResultSet rs = stmt.executeQuery(query);

			if (rs.next()) {
				k = buildKlasse(rs);
			}

			return k;

		} catch (Exception sql) {
			System.out.println(sql);
		}
		return null;
	}

}
